package com.itheima.d10_reflect_field;

import com.itheima.d09_reflect_constructor.Cat;

import java.lang.reflect.Field;
import java.lang.reflect.Field;

/**
 * 目标：了解获取成员变量Field的方式
 */
public class Test {

    public static void main(String[] args) throws Exception {
        //1.获取Class对象
        Class<Pig> cls = Pig.class;

        //2.获取所有公共的成员变量
        Field[] fields = cls.getFields(); //获取所有公共的属性
        for (Field field : fields) {
            System.out.println( field);
        }
        System.out.println("========");

        //3.获取所有声明定义的构造方法
        Field[] declaredFields = cls.getDeclaredFields(); //获取所有定义的属性
        for (Field declaredField : declaredFields) {
            System.out.println( declaredField);
        }
        System.out.println("========");

        //4.获取指定的公共的构造方法
        Field sexField = cls.getField("sex");
        System.out.println( sexField );
        System.out.println("========");

        //5.获取指定的构造方法
        Field nameField = cls.getDeclaredField("name");
        System.out.println( nameField);

        //6.创建小猫对象：设置name=小花猫,price=500
        Pig pig = cls.newInstance(); //获取无参构造方法 + 执行无参构造方法
        //pig.setPrice(500);
        //pig.setName("小花猫");
        //System.out.println(pig);

        Field nameF = cls.getDeclaredField("name");
        nameF.setAccessible(true);
        nameF.set(pig, "小花猫");

        Field priceF = cls.getDeclaredField("price");
        priceF.setAccessible(true);
        priceF.set(pig, 500);

        System.out.println( pig );

    }
}
